package com.kclm.se.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;

import jdk8.stream.Order;

public class ClassDemo {

	public static void main(String[] args) throws Exception {
		//获取 Class 实例
		Class<Order> ordClass = Order.class;
		//调用Class的相关方法来获取我们想要的东西
		System.out.printf("类的简要名字：%s\n", ordClass.getSimpleName());
		System.out.printf("类的全限定名字：%s\n", ordClass.getName());
		//获取此类中的所有属性
//		Field[] fields = ordClass.getFields();
		Field[] fields = ordClass.getDeclaredFields();
		System.out.printf("类[%s]中有%d个属性，如下：\n", ordClass.getSimpleName(), fields.length);
		for(Field f : fields) {
			System.out.printf("属性名：%s, 修饰符：%s\n", f.getName(), Modifier.toString(f.getModifiers()));
			//如果我们要去给某个属性赋值
			f.setAccessible(true);
			//
			if(Modifier.isStatic(f.getModifiers())) {
				//
				System.out.println("给静态属性赋值：");
				f.set(null, 200);
			}
		}
		//取出静态属性 _index的值
		Field _indexField = ordClass.getDeclaredField("_index");
		_indexField.setAccessible(true);
		System.out.println("静态属性 _index的值："+_indexField.get(null));
		
		//获取所此类的所有方法
		Method[] methods = ordClass.getDeclaredMethods();
		//
		for(Method m : methods) {
			System.out.printf("方法名：%s,修饰符：%s\n", m.getName(), Modifier.toString(m.getModifiers()));
			//方法的参数
			Parameter[] params = m.getParameters();
			if(params.length > 0) {
				System.out.println("方法的参数有：");
				//
				for(Parameter p : params) {
					System.out.printf("参数类型：%s, 参数名：%s", p.getType(), p.getName());
				}
				System.out.println();
			} else {
				System.out.println("方法无参!");
			}
		}
	}
}
